// a.cxx
// C++ 20 开始推荐使用 improt 替代 #incldue
// improt 避免头文件重复包含，提高编译速度
// g++ -std=C++20 a.cxx -o a
#include <iostream>
// 字符串相关
#include <string>
// 基于字符串的流
#include <sstream>

// bool类型
// #include <stdbool.h>
// C++20 
// #include <format>

// #include <istream>
// #include <ostream>
// cout stdout
// cin stdin
// cerr stderr
// clog 日志
using namespace std;
int main(int argc, char* argv[])
{
    // 如果声明的类型为常量，初始化的时候要赋值
    const int n = 9;
    
    // p 整型指针
    // int *p = &n; error
    const int *p = &n;

    // 初始化
    int n;
    int n = 1;
    int n(1);
    int n{1};
    int n = {1};

    // c 宏定义,预处理会进行替换
    int *p1 = NULL;
    // c++
    int *p2 = nullptr;
    int *p3 = 0;

    // 命名空间 namespace
    std::cout << "hello C++" << std::endl;
    std::cout << "hello C++\n";

    bool b1 = true;
    bool b2 = false;

    char c1;            //1byte
    wchar_t c2 = L'w';  //2,4
    char16_t c3;        //2byte
    char32_t c4;        //4byte

    // auto 类型 类型推导
    auto a1 = 32;
    auto a2 = 15.0;
    auto a3 = 'a';
    auto a4 = c3;

    int array[] = {1,2,3,4,5};
    char s1[] = "this is a line";

    // 返回遍历容器，使用char*就不可以
    for(auto i : array)
    {
        cout << i;
    }
    cout <<  endl;

    string name;   //字符串类型 替代 char name[32]      char* name
    int age;
    double weight;
    std::cout << "请输入年龄：";
    // cin 有空格读取就终止了
    std::cin >> age;
    std::cout << "请输入体重：";
    std::cin >> weight;
    cout << "年龄："<< age << "\n体重："<< weight << endl;
    // string msg = format("姓名：{}\n年龄:{:03d}\n体重:{:.4f}\n",name, age, weight);
    // cout << msg << endl;

    // c++ 是 c 的超集，有效的c函数都是合法的c++函数
    // printf("姓名:\n年龄:\n体重:");
    return 0;
}